package Gather.StreamExercise.StreamDome002;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * ClassName:StreamExercise003
 * Package:Gather.StreamExercise.StreamDome002
 * Description:
 *
 * @Author:ZhangXin
 * @Create2023/2/24-22:51
 * @Version:v1.0
 */
public class StreamExercise003 {
    /*现在有两个ArrayList集合
     * 第一个集合中：存储6名男演员的名字和年龄
     * 第二个集合中：存储6名女演员的名字和年龄
     *
     * 要求
     * 1.男演员只要名字为3个字的前两个人
     * 2.女演员只要姓杨的,并且不要第一个
     * 3.把过滤后的男演员姓名和女演员姓名合并到一起
     * 4.将上一步的演员信息封装成Actor对象
     * 5.将所有的演员对象都保存到List集合中
     *
     * 备注：演员类Actor,属性只有一个：name,age*/
    public static void main(String[] args) {
        ArrayList<String> list1 = new ArrayList<>();
        ArrayList<String> list2 = new ArrayList<>();
        Collections.addAll(list1,"蔡坤坤,24","叶齁咸,23","刘不甜,22","吴谦,24","肖亮亮,27","谷加,30");
        Collections.addAll(list2,"赵小银,35","杨银,36","高圆圆,43","张甜甜,31","刘师,35","杨小幂,33");

        //1.男演员只要名字为3个字的前两个人
        Stream<String> stream1 = list1.stream()
                .filter(s -> (s.split(",")[0]).length() == 3)
                .limit(2);
        //2.女演员只要姓杨的,并且不要第一个
        Stream<String> stream2 = list2.stream()
                .filter(s -> (s.split(",")[0]).startsWith("杨"))
                .skip(1);

        //3.把过滤后的男演员姓名和女演员姓名合并到一起
        //static<T>Stream<T> concat(Stream a,Stream b)  合并a和b两个流为一个流
//        Stream.concat(
//                list1.stream()
//                        .filter(s->(s.split(",")[0]).length()==3).limit(2),
//                list2.stream()
//                        .filter(s->(s.split(",")[0]).startsWith("杨"))
//                        .skip(1))
//                .forEach(s-> System.out.println(s)) ;

        //4.将上一步的演员信息封装成Actor对象
        //String->Actor对象  类型转换
//        Stream.concat(stream1,stream2).map(new Function<String, Actor>() {
//            @Override
//            public Actor apply(String s) {
//                String name = s.split(",")[0];
//                int age = Integer.parseInt(s.split(",")[1]);
//
//                return new Actor(name,age);
//            }
//        }).forEach(s-> System.out.println(s));

//        Stream.concat(stream1,stream2)
//                .map(s->
//                {
//                    String name=s.split(",")[0];
//                    int age = Integer.parseInt(s.split(",")[1]);
//                    return new Actor(name,age);
//                }).forEach(s-> System.out.println(s));

        //5.将所有的演员对象都保存到List集合中(收集到list集合中)
        List<Actor> list = Stream.concat(stream1, stream2)
                .map(s -> new Actor(s.split(",")[0], Integer.parseInt(s.split(",")[1])))
                .collect(Collectors.toList());

        System.out.println(list);

    }
}
